// JS的方法定义和使用
// 1. 声明式方式
//    语法:    function 方法名(参数){ 方法体 }
function printInfo(){
    console.log("printInfo方法")
}
// 方法调用
printInfo()
// 声明式方法可以先调用后定义
showMsg()
function showMsg(){
    console.log("showMsg")
}

// 2. 表达式方式 => JS语法中方法也被理解为一种特殊的数据类型 Function
//                所以JS中可以通过变量定义方式定义方法
//   语法:    var|let|const 变量名-方法名 = function(参数){ 方法体 }
//                   其中  function(参数){ 方法体 } 代码构建的方法被叫做匿名函数
let funA = function (){
    console.log("funA")
}
funA();

// 表达式方式 不能先调用后定义的 ( 表达式方式不能先初始化的 )
//      1. 调用的方法变量确实不存在时 :  funB is not defined
//      2. 变量funB的取值非funtion声明的方法 : funB is not a function
// let funTest = 111;
//  funTest() // == funTest is not a function

// 下述代码运行会因为 var 的变量声明规则出现 变量提升
//      var 的变量提升,提升的是 变量声明 不包含初始值
try {
    funB();
    var funB = function (){
        console.log("funB")
    }
} catch (e){
    console.error(e)
}
// 上述代码基于var的变量提示,最终会以如下结果运行
// var funB;
// funB();
// funB = function (){
//     console.log("funB")
// }

// 3. 箭头函数 => ES6 扩展的方式
//               只能用于 表达式方法定义语法的 简化
//      语法:    var|let|const 变量名-方法名 = (参数)=>{ 方法体 }
let funC = ()=>{
    console.log("funC")
}
funC();












